<?php

namespace App\Http\Controllers\Test;

use App\Model\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

use Illuminate\Support\Facades\Cookie;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class UserController extends Controller
{
    //
    public function __construct()
    {
//        $this->middleware('token:2')->only('show');
//        $this->middleware('token:2')->except(['show']);
        $this->middleware(function ($request, $next) {
//            var_dump($next);
//            var_dump($request->input('id'));
//            if (!is_numeric($request->input('id'))) {
//                throw  new NotFoundHttpException();
//            }
            return $next($request);
        });
    }

    public function show(int $id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
    //单动作控制器
//    public function __invoke(int $id)
//    {
//        return view('user.profile', ['user' => User::findOrFail($id)]);
//    }
    public function test(Request $request, int $id)
    {
//        echo  $request->method();//GET
//        echo  $request->path();//test/1
//        dd($request->is('tests/*'));
        // 不包含查询字符串
//        echo $url = $request->url();//http://laravel.cn/test/1

        // 包含查询字符串
//        echo $url_with_query = $request->fullUrl();//http://laravel.cn/test/1?a=b
//        dd($request->isMethod('get'));
//        dd($request->all());
//        dd($request->input('name','默认值'));
//        dd($request->input('products.*.name'));//http://laravel.cn/test/1?products[][name]=学院君&products[][name]=学院君小号
//        dd($request->query('products'));
//        dd($request->input('a'));
//        dd($request->only(['a','c','products']));
//        dd($request->has('a'));
//        dd($request->has(['a','c','products']));
//        dd($request->filled('a'));
//        $request->flashOnly(['username','password']);
//        var_dump($request->old('username'));
//        dd($request->old('username'));
//        return redirect('user')->withInput($request->except('password'));
//         var_dump($request->cookie());
//        dd(Cookie::get());

//        return response('asdas')->cookie( 'name', '学院君', 1);
//        echo $id;
//        $file = $request->file('photo');
//        dd($request->photo);
//        dd($request->hasFile('photo'));
//        dd($request->file('photo')->isValid());
//        dd($request->file('photo')->path()); //"C:\Users\Administrator\AppData\Local\Temp\php54B3.tmp"
//        dd($request->file('photo')->extension());
        if ($request->hasFile('photo') && $request->file('photo')->isValid()) {
            $photo = $request->file('photo');
            $extension = $photo->extension();
            //$store_result = $photo->store('photo');
            $store_result = $photo->storeAs('photo', 'test.jpg');
            $output = [
                'extension' => $extension,
                'store_result' => $store_result
            ];
            print_r($output);
            exit();
        }
        exit('未获取到上传文件或上传过程出错');
    }

    //响应
    public function test2()
    {
        /**
         *  Cache-Control: max-age=86400
         *  Cache-Control: no-cache
         *  Cache-Control: private
         * Connection: keep-alive
         * Content-Encoding: gzip
         * Content-Type: text/css
         *  Content-Type: image/x-icon
         * Date: Sat, 23 Mar 2019 01:46:52 GMT
         * Expires: Sun, 24 Mar 2019 01:46:52 GMT
         * Last-Modified: Fri, 08 Mar 2019 08:50:52 GMT
         * Server: nginx
         * Transfer-Encoding: chunked
         * Vary: Accept-Encoding
         * Set-Cookie: BDRCVFR[Qj84nbF8CT_]=mk3SLVN4HKm; path=/; domain=.baidu.com
         * X-Ua-Compatible: IE=Edge,chrome=1
         * Content-Type: image/png
         * Content-Disposition: attachment; filename=.jpg; filename*=utf-8''%E5%9B%BE%E7%89%87%E4%B8%8D%E8%83%BD%E6%98%AF%E4%B8%AD%E6%96%87%E5%90%97.jpg
         * Content-Length: 117839
         * Accept-Ranges: bytes 在客户端响应图片pdf预览
         *
         */
//        request
        //Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
        /**
         *
         *  Accept-Encoding: gzip, deflate
         *  Accept-Language: zh-CN,zh;q=0.9
         *  Cache-Control: max-age=0
         *  Connection: keep-alive
         *  Cookie: aaa=eyJpdiI6InczR2VhR2pPZWJiWk9HWU9tQlNtQ2c9PSIsInZhbHVlIjoiSzFoQWhyVEZ5OTFxN1JLR3pxN3ViZz09IiwibWFjIjoiYjdmNDU3NzFmODQ3OTRiOTEyZjZmZDAwZDk0NjczNDBhZDdlOWRjOTIwZDAyMTg1YWIxNjI3N2VkOGRhNTI5NyJ9; XSRF-TOKEN=eyJpdiI6Imh3VWFUZWluelZjZWRNTUl0RkdIQ0E9PSIsInZhbHVlIjoiVFl0Q1JNT3RjRE9zb0xcL0lOXC9qVDdxV2NheHZ3OTY4ODNXN3Zma1l2ajBCaWQ5NDRCQ0pwc0tQVzZmMEZ1M3Y4IiwibWFjIjoiOGY2MmRjMzdkOTFjMzUxNzgyZWVmZTMyNjczNmVkMzdjZjZkZGM4ZmEwMzg0ZjY1NDIxODkzYjc2MzIzMzg0ZSJ9; laravel_session=eyJpdiI6IlBVMGdLNzRJQTRVZWFZSHZlR3pBcHc9PSIsInZhbHVlIjoiVWF1Snh5VllEaXhObUtTRzhEd3d3WXRmRmVjVmN0NEszbEh0d3R6WVZTVGZEbWZ1RmhWMm9SUTMxVEhEd3ZRWiIsIm1hYyI6ImQ3OTUyMmEzZjAyYjFjMTJiZWU3NjMyZjY0NTJhN2ZmZmY4ZDYxYWY3ZjE5NmViNTIxMjI0ZjQwYjk0Yzg2MzkifQ%3D%3D
         *   Host: laravel.cn
         *   Upgrade-Insecure-Requests: 1
         *   User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3650.400 QQBrowser/10.4.3341.400
         */

//        return response(['json'=>'header'])->header('Content-type','text/plain');
//        return response(['json'=>'header'])->header('Content-type','application/json');
//        return response(['json'=>'header'])->header('Content-type','text/html; charset=UTF-8');
//        return response(['json'=>'header'])->header('Content-type','image/x-icon');
//        return response(['json'=>'header'])
//            ->header('Content-type','application/json')
//            ->header('X-Header-One','Header Value')
//            ->header('X-Header-Two','Header Value')
//            ->header('Server','BWS/1.1')
//            ->cookie('Cookie-name','cookie_value',1,'/','.baidu.com',true,true);
//        return response(['json'=>'header'])->withHeaders([
//            'Content-Type' => 'application/json',
//            'X-Header-One' => 'Header Value',
//            'X-Header-Two' => 'Header Value',
//        ]);
        //附件的 Cookie 推送到输出响应队列
//        Cookie::queue(Cookie::make('key','cookie_value',1));
//        Cookie::queue('cookie_key','value',1);
//        return response('Hello Laravel', 200)
//            ->header('Content-Type', 'text/plain');
//        return redirect('post');
//        return redirect('redirect');
//        back 返回到前一个 UR
//        return back()->withInput();
        //重定向到命名路由如果调用不带参数的 redirect 方法，会返回一个 Illuminate\Routing\Redirector 实例，然后就可以使用
        // Redirector 实例上的所有方法。例如，要生成一个 RedirectResponse 到命名路由，可以使用 route 方法：
//        return redirect()->route('aaa', ['id' => '1']);
//        通过 Eloquent 模型填充参数
//        return redirect()->route('user', ['id' => '1']);
//        重定向到控制器动作
//        return redirect()->action('Test\PostController@edit');
//        return redirect()->action('Test\PostController@edit', ['id' => 1]);
//        重定向到外部域名
//        return redirect()->away('http://www.baidu.com');
//        带一次性 Session 数据的重定向
//          return redirect('redirect')->with(['session_key','session_name']);
//          return redirect('redirect')->with('status', 'Profile updated!');
//        其它响应类型
//          return response()->view('user.profile',['user'=>'殷凡良'],200,[
//              'Content-Type'=>'text/plain',
//              'X-Header-One'=>'value'
//          ])->header('Status Code','500');
//              ->withHeaders([
//              'Content-Type'=>'text/plain',
//              'X-Header-One'=>'value'
//          ]);
        //JSON响应
//        return response()->json([
//            'json'=>'json方法会自动将 Content-Type 头设置为 application/json'
//        ]);
        //如果你想要创建一个 JSONP 响应，可以在 json 方法之后调用 withCallback 方法：
//        return response()->json([
//            ['name' => 'Abigail', 'state' => 'CA']
//        ])->withCallback(\request()->input('callback'));
        //或者直接使用 jsonp 方法：
//        return response()->jsonp(request()->input('callback'),['name' => 'Abigail', 'state' => 'CA']);
        //文件下载
//        echo storage_path('app\photo\test.jpg');
//        return response()->download(storage_path('app\photo\test.jpg'),'图片不能是中文吗.jpg');
//        流式下载
//        return response()->streamDownload(function () {
//            echo file_get_contents(storage_path('app\photo\test.jpg'));
//        }, 'laravel-readme.jpg');
//        文件响应 file 方法可用于直接在用户浏览器显示文件
//        return response()->file(storage_path('app\photo\test.jpg'));
//        如果你想要定义一个自定义的可以在多个路由和控制器中复用的响应，可以使用 Response 门面上的 macro 方法。例如，在某个服务提供者的 boot 方法中编写代码如下
            return response()->caps('asdfg');
    }

    public function redirect()
    {
        var_dump(session('status'));
        var_dump(session('status'));
        return '响应重定向';
    }

    //没搞懂咋回事
    public function test3(User $user, $id)
    {
        echo $id;
        echo '通过 Eloquent 模型填充参数';
        dd($user);
//        dd($user::all(['name']));
    }
}
